package com.ravi.util.mybatis;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.type.*;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@MappedJdbcTypes(JdbcType.VARCHAR) // 对应jdbc 类型
@MappedTypes({JSONObject.class}) // 对应处理后类型
public class JsonObjectTypeHandler extends BaseTypeHandler<JSONObject> {
	// 当为 PreparedStatement 参数时，如何处理对象
	@Override
	public void setNonNullParameter(PreparedStatement preparedStatement, int i, JSONObject o, JdbcType jdbcType) throws SQLException {
		preparedStatement.setString(i, JSON.toJSONString(o));
	}

	// 当通过名称从结果中取json字段时如何处理
	@Override
	public JSONObject getNullableResult(ResultSet resultSet, String s) throws SQLException {
		String t = resultSet.getString(s);
		return JSON.parseObject(t);
	}

	// 当通过序列号从结果中取json字段时如何处理
	@Override
	public JSONObject getNullableResult(ResultSet resultSet, int i) throws SQLException {
		String t = resultSet.getString(i);
		return JSON.parseObject(t);
	}

	// 当通过序列号从 CallableStatement 中取json字段时如何处理
	@Override
	public JSONObject getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
		String t = callableStatement.getString(i);
		return JSON.parseObject(t);
	}
}
